package com.hfkh.util;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;



/**
 * 反射工具类
 */
public class ReflectionUtil {
    /**
     * 为指定的beanpropName属性的值设置为value
     *
     * @param bean   目标对象
     * @param proName 对象的属性名
     * @param value	 值
     */
    public static void setPropToBean(Object bean ,String proName,Object value){
        Field f;
        try{
            //获取对象指定的属性
            f = bean.getClass().getDeclaredField(proName);
            //f将字段设置为可通过反射访问
            f.setAccessible(true);
            //为属性赋值
            f.set(bean, value);
        }catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 从resultSet中读取一行数据，并填充到指定的实体bean
     * @param entity    	待填充的实体bean
     * @param resultSet		从数据库中加载的数据
     * @throws SQLException
     */
    public static void setPropToBeanFromResultSet(Object entity,ResultSet resultSet) throws SQLException{
        //通过反射获取对象的所有字段
        Field[] declaredFields = entity.getClass().getDeclaredFields();
        //遍历所有的字段，从resultSet中读取相应的电话机，并填充至对象的属性中
        for (int i = 0; i < declaredFields.length; i++) {
            //如果是字符串类型的数据
            if(declaredFields[i].getType().getSimpleName().equals("String")){
                setPropToBean(entity, declaredFields[i].getName(), resultSet.getString(declaredFields[i].getName()));
                //如果是int类型
            }else if(declaredFields[i].getType().getSimpleName().equals("Integer")){
                setPropToBean(entity, declaredFields[i].getName(), resultSet.getInt(declaredFields[i].getName()));
                //如果是long类型数据
            }else if(declaredFields[i].getType().getSimpleName().equals("Long")){
                setPropToBean(entity, declaredFields[i].getName(), resultSet.getLong(declaredFields[i].getName()));
            }else if(declaredFields[i].getType().getSimpleName().equals("Date")){
                setPropToBean(entity, declaredFields[i].getName(), resultSet.getDate(declaredFields[i].getName()));
            }else{
                setPropToBean(entity, declaredFields[i].getName(), resultSet.getObject(declaredFields[i].getName()));
            }
        }
    }
}